from pycparser import c_ast

def get_type_name(type_decl):
    """
    从 TypeDecl 节点提取类型信息
    """
    # 获取最内层的类型
    type_node = type_decl.type

    # 基本类型直接返回名称
    if isinstance(type_node, c_ast.IdentifierType):
        return ' '.join(type_node.names)

    # 处理结构体类型
    elif isinstance(type_node, c_ast.Struct):
        return f"struct {type_node.name}"

    # 处理联合体类型
    elif isinstance(type_node, c_ast.Union):
        return f"union {type_node.name}"

    # 处理枚举类型
    elif isinstance(type_node, c_ast.Enum):
        return f"enum {type_node.name}"

    return "unknown type"


def get_full_type(decl):
    """
    递归处理复杂类型声明
    """
    typ = type(decl)

    # TypeDecl 是最基本的类型声明
    if typ == c_ast.TypeDecl:
        return get_type_name(decl)

    # 指针类型
    elif typ == c_ast.PtrDecl:
        return get_full_type(decl.type) + " *"

    # 数组类型
    elif typ == c_ast.ArrayDecl:
        return get_full_type(decl.type) + "[]"

    # 函数类型
    elif typ == c_ast.FuncDecl:
        return get_full_type(decl.type) + " (function)"

    return get_type_name(decl)